export const performScript = (script, appName, global) => {
  // eval执行代码 可能会造成 isTurnChild 这个方法重复执行 造成死循环
  // 因为 子应用中的vue或者react项目中也用到了history上的方法 只要用到就会走我们设置的路由监听器
  // 说明我们写的isTurnChild方法未能正确拦截到

  // eval(script)

  // 第二种方式：new Function

  // new Function(script).call(window)

  window.proxy = global
  console.log(global)
  const scriptText = `
    return (window => {
      ${script}
      return window['${appName}']
    })(window.proxy)
  `

  return new Function(scriptText)()
}

export const performScriptForEval = (script, appName, global) => {
  // 获取子应用上设置的library信息 window.appName

  window.proxy = global
  const scriptText = `
    ((window) => {
      ${script}
      return window['${appName}']
    })(window.proxy)
  `

  // eval 返回字符串中代码的返回值
  // return eval(scriptText).call(global, global)

  return eval(scriptText)
}

/*
  https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function

  由Function 构造器创建的函数不会创建当前环境的闭包，它们总是被创建于全局环境，因此在运行时它们只能访问全局变量和自己的局部变量，不能访问它们被 Function 构造器创建时所在的作用域的变量。这一点与使用 eval 执行创建函数的代码不同
*/
